package com.cskaoyan.javase.array._3memory;

/**
 * @description: 数组的动态初始化
 * @author: wuguidong@cskaoyan.onaliyun.com
 **/

/**
 * 动态初始化一个数组
 *
 */
public class Demo2 {
    public static void main(String[] args) {
        //动态初始化一个int类型数组
        int[] arr = new int[3];

        //1.数组的访问
        //直接输出数组名 Implicit call to 'toString()' on array 'arr'
        //结果是[I@1540e19d,[表示是一个一维数组,I表示数组元素类型是int类型
        //@后面跟的是一个十六进制的数,可以近似认为它表示数组的内存空间的地址(地址值)
        //arr是一个变量,是一个局部变量,输出这个局部变量可以得到数组的内存地址
        //所以可以认为arr这个局部变量中就是存放了数组的内存地址(该地址是堆上数组对象的内存地址)
        //引用数据类型可以用"=="连接,比较的是地址,比较的就是堆上对象的地址
        System.out.println(arr);

        //获取数组中的元素,需要通过下标访问对应的元素,语法: 数组名[下标]
        //System.out.println(arr[-1]);
        //int数组中元素的默认值是0
        System.out.println(arr[0]);
        System.out.println(arr[1]);
        System.out.println(arr[2]);
        //Array index is out of bounds
        //System.out.println(arr[3]);

        //2.数组元素的赋值,数组名[下标] = 值
        arr[0] = 666;
        arr[1] = 777;
        arr[2] = 888;
        System.out.println(arr[0]);
        System.out.println(arr[1]);
        System.out.println(arr[2]);
        System.out.println(arr);

        //3.获取数组的长度 数组名.length
        System.out.println(arr.length);

    }
}
